package conf

import (
	"ErgoGo/pkg/database"
	"encoding/json"
	"strconv"
)

// 定义枚举值 api_count 表示api调用次数
const (
	ApiCount        = "api_count"        // api调用次数
	Prefix          = "prefix"           // deepseek请求前缀
	ArticleLength   = "article_length"   // 文章长度
	Categories      = "categories"       // 文章栏目
	DefaultCategory = "default_category" // 默认栏目
)

type Category struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

func GetConfig(field string) string {
	var config Conf
	database.DB.Where("field_name = ?", field).First(&config)
	return config.FieldValue
}

func SetConfig(field string, value string) {
	var config Conf
	database.DB.Where("field_name = ?", field).First(&config)
	if config.ID == 0 {
		config = Conf{
			FieldName:  field,
			FieldValue: value,
		}
		config.Create()
	} else {
		database.DB.Model(&config).Update("field_value", value)
	}
}

// GetCategories 获取所有栏目
func GetCategories() []Category {
	var categories []Category
	categoriesStr := GetConfig(Categories)
	if categoriesStr != "" {
		_ = json.Unmarshal([]byte(categoriesStr), &categories)
	}
	return categories
}

// SetCategories 设置栏目
func SetCategories(categories []Category) {
	if categoriesBytes, err := json.Marshal(categories); err == nil {
		SetConfig(Categories, string(categoriesBytes))
	}
}

// GetDefaultCategory 获取默认栏目ID
func GetDefaultCategory() string {
	return GetConfig(DefaultCategory)
}

// SetDefaultCategory 设置默认栏目ID
func SetDefaultCategory(categoryID string) {
	SetConfig(DefaultCategory, categoryID)
}

// 调用api次数累加
func IncrementApiCount() {
	var config Conf
	database.DB.Where("field_name = ?", ApiCount).First(&config)
	count, _ := strconv.Atoi(config.FieldValue)
	database.DB.Model(&config).Update("field_value", strconv.Itoa(count+1))
}
